//
// Created by LiuYou on 2021/5/21.
//

// TODO 注意:
/** @file bits/hashtable.h
 *  This is an internal header file, included by other library headers.
 *  Do not attempt to use it directly. @headername{unordered_map, unordered_set}
 */
// 不要直接使用 bits/hashtable.h 头文件。如果想使用可以导入 unordered_map或者unordered_set的头文件。




#include <cstdlib>
#include <unordered_map>
#include <iostream>

int main() {
    // 创建一个hashtable。
    // TODO 注意: 这里为什么没有创建_Hashtable, 原因是它的模板参数实在是太多了！！！！而且我也不懂。
    //  通过阅读源代码得知__ummap_hashtable是对_Hashtable的using别名。它的参数模板更容易使用和利于理解。
    std::__umap_hashtable<const char*, char*> hashtable;
    hashtable.insert({"jenny", "8675309"});
    for (const auto& item : hashtable) {
        std::cout << item.first << " " << item.second << " " << std::endl;
    }

    // TODO 注意: C++的标准库也提供了hashtable的中括号运算符重载, 方便了查询、插入、修改。牛, 标准库真的很方便！！！！
//    hashtable.insert({"emergency", "911"});
    hashtable["emergency"] = "911";
    for (const auto& item : hashtable) {
        std::cout << item.first << " " << item.second << " " << std::endl;
    }

    std::cout << "======================================================" << std::endl;
    std::cout << hashtable["jenny"] << std::endl;
    hashtable["jenny"] = "chong";
    std::cout << hashtable["jenny"] << std::endl;


    std::exit(0);
}